Introduction: Mapping
of broad research field around EIST in v2
Here are preliminary results of the bibliometric mapping of EIST. Its
purpose is:
- To map the broader research community and distinct research field
the department contributes to.
- Identify core knowledge bases, research areas gtrends and
topics.
- Highlight the positioning of the department within this
dynamics.
The method for the research-field-mapping can be reviewed here:
Rakas, M.,
& Hain, D. S. (2019). The state of innovation system research: What
happens beneath the surface?. Research Policy, 48(9), 103787.
Note: The analysis in this document depicts the
larger research field around the department, thereby all
analysis results are based on the publications of the department plus
related
—>
General Overview over
the research field
Note: This section provides basic descriptives of th
identified research fielld, including number of articles over time,
countries, institutions, and authors. See
Technical descriptionfor additional explanations.
Main Indicators:
Publications, Authors, Countries
Connection between
the research field’s Top Authors-Keywords-Journals
Topic modelling
Note: Here, we report the results of a LDA
topic-modelling (basically, clustering on words) on all title+abstract
texts. Identified topics can be interpreted as broad themes in the
research field. See Technical descriptionfor additional
explanations.
Knowledge Bases:
Co-Citation network analysis
Note: This analysis refers the co-citation analysis,
where the cited references and not the original publications are the
unit of analysis. Identified knowledge bases can be interpreted as the
knowledge foundation the field draws from. See
Technical descriptionfor additional explanations.
Research Areas:
Bibliographic coupling analysis
Note: This analysis refers the bibliographic
coupling analysis, where original publications are the unit of analysis.
Identified research areas can be interpreted as the field’s current
research frontier. See Technical descriptionfor additional
explanations.

Knowledge Bases,
Research Areas & Topics Interaction
Joint Overview over
Knowledge Bases, Research Areas, and Topics
This plot shows the connection of publications in the research areas
to knowledge bases (by citations) and topics (by gamma, document-topic
weight)

Collaboration

R version 4.2.1 (2022-06-23)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Ventura 13.1
Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] directlabels_2021.1.13 RColorBrewer_1.1-3 topicmodels_0.2-12 patchwork_1.1.2 ggrepel_0.9.1
[6] ggforce_0.4.1 plotly_4.10.1 widyr_0.1.5 kableExtra_1.3.4 knitr_1.40
[11] tidytext_0.3.4 ggraph_2.1.0 tidygraph_1.2.2 bibliometrix_4.1.0 magrittr_2.0.3
[16] forcats_0.5.2 stringr_1.4.1 dplyr_1.0.10 purrr_0.3.5 readr_2.1.3
[21] tidyr_1.2.1 tibble_3.1.8 ggplot2_3.4.0 tidyverse_1.3.2
loaded via a namespace (and not attached):
[1] readxl_1.4.1 backports_1.4.1 servr_0.25 systemfonts_1.0.4 plyr_1.8.8
[6] igraph_1.3.5 lazyeval_0.2.2 crosstalk_1.2.0 SnowballC_0.7.0 digest_0.6.30
[11] htmltools_0.5.3 viridis_0.6.2 fansi_1.0.3 tm_0.7-9 googlesheets4_1.0.1
[16] cluster_2.1.3 tzdb_0.3.0 openxlsx_4.2.5.1 graphlayouts_0.8.3 modelr_0.1.9
[21] vroom_1.6.0 svglite_2.1.0 colorspace_2.0-3 rvest_1.0.3 pubmedR_0.0.3
[26] haven_2.5.1 xfun_0.34 crayon_1.5.2 jsonlite_1.8.3 bibliometrixData_0.3.0
[31] glue_1.6.2 polyclip_1.10-4 gtable_0.3.1 gargle_1.2.1 emmeans_1.8.2
[36] webshot_0.5.4 rentrez_1.2.3 scales_1.2.1 mvtnorm_1.1-3 DBI_1.1.3
[41] Rcpp_1.0.9 viridisLite_0.4.1 xtable_1.8-4 dimensionsR_0.0.3 flashClust_1.01-2
[46] bit_4.0.5 stats4_4.2.1 DT_0.26 htmlwidgets_1.5.4 httr_1.4.4
[51] ellipsis_0.3.2 modeltools_0.2-23 factoextra_1.0.7 pkgconfig_2.0.3 XML_3.99-0.12
[56] farver_2.1.1 multcompView_0.1-8 sass_0.4.2 dbplyr_2.2.1 utf8_1.2.2
[61] reshape2_1.4.4 tidyselect_1.2.0 labeling_0.4.2 rlang_1.0.6 later_1.3.0
[66] munsell_0.5.0 cellranger_1.1.0 tools_4.2.1 cachem_1.0.6 cli_3.4.1
[71] generics_0.1.3 broom_1.0.1 evaluate_0.17 fastmap_1.1.0 yaml_2.3.6
[76] bit64_4.0.5 fs_1.5.2 zip_2.2.2 mime_0.12 slam_0.1-50
[81] leaps_3.1 xml2_1.3.3 tokenizers_0.2.3 compiler_4.2.1 rstudioapi_0.14
[86] reprex_2.0.2 tweenr_2.0.2 bslib_0.4.0 stringi_1.7.8 highr_0.9
[91] lattice_0.20-45 Matrix_1.5-1 vctrs_0.5.1 stringdist_0.9.10 pillar_1.8.1
[96] lifecycle_1.0.3 rscopus_0.6.6 jquerylib_0.1.4 estimability_1.4.1 data.table_1.14.4
[101] httpuv_1.6.6 R6_2.5.1 promises_1.2.0.1 gridExtra_2.3 janeaustenr_1.0.0
[106] MASS_7.3-57 assertthat_0.2.1 withr_2.5.0 parallel_4.2.1 hms_1.1.2
[111] quadprog_1.5-8 grid_4.2.1 rmarkdown_2.17 googledrive_2.0.0 NLP_0.2-1
[116] scatterplot3d_0.3-42 shiny_1.7.3 lubridate_1.8.0 FactoMineR_2.6
Collaboration
network
Endnotes
LS0tCnRpdGxlOiAiTHV4ZW1ib3VyZyBSZXNlYXJjaCBFdmFsdWF0aW9uIDIwMjI6IEZpZWxkIE1hcHBpbmcgb2YgS25vd2xlZGdlIFN0cnVjdHVyZSIKYXV0aG9yOiAiRGFuaWVsIFMuIEhhaW4iCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGRmX3ByaW50OiBwYWdlZAogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICB0b2M6IGZhbHNlCiAgICB0b2NfZGVwdGg6IDMKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBmYWxzZQpwYXJhbXM6CiAgICBpbnN0aXR1dGU6IAogICAgICAgdmFsdWU6IG51bGwKICAgIGRlcGFydG1lbnQ6CiAgICAgICB2YWx1ZTogbnVsbAotLS0KCjwhLS0tCiMgQWRkIHRvIFlBTUwgd2hlbiBjb21waWxpbmcgaHRtbCAtLTwgd2hlbiByZXZpZXdpbmcgY2hhbmdlIGZpcnN0IGxpbmUgdG86IGh0bWxfbm90ZWJvb2sKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IGZsYXRseQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBkZl9wcmludDogcGFnZWQKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgdG9jOiBmYWxzZQogICAgdG9jX2RlcHRoOiAzCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKCiMgQWRkIHdoZW4gY29tcGlsaW5nIHBkZgojIEFkZCB0byBZQU1MIHdoZW4gY29tcGlsaW5nIGh0bWwKICAgYm9va2Rvd246OnBkZl9kb2N1bWVudDI6IAogICAgZmlnX2NhcHRpb246IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgZ2xvYmFsX251bWJlcmluZzogdHJ1ZQotLS0+CgoKYGBgez1odG1sfQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTIwMHB4OwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKfQo8L3N0eWxlPgpgYGAKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIyMgR2VuZXJpYyBwcmVhbWJsZQojcm0obGlzdD1scygpKQpTeXMuc2V0ZW52KExBTkcgPSAiZW4iKQpvcHRpb25zKHNjaXBlbiA9IDUpCnNldC5zZWVkKDEzMzcpCgojIyMgTG9hZCBwYWNrYWdlcyAgCiMgZ2VuZXJhbApsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShtYWdyaXR0cikKbGlicmFyeSh3aWR5cikKCiMgS2libGlvICYgTlcKbGlicmFyeShiaWJsaW9tZXRyaXgpCmxpYnJhcnkodGlkeWdyYXBoKQpsaWJyYXJ5KGdncmFwaCkKCiMgTkxQCmxpYnJhcnkodGlkeXRleHQpCgojIERhdGF2aXoKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ2dmb3JjZSkKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KHBhdGNod29yaykKCiMgS25pdApsaWJyYXJ5KGtuaXRyKSAjIEZvciBkaXNwbGF5IG9mIHRoZSBtYXJrZG93bgpsaWJyYXJ5KGthYmxlRXh0cmEpICMgRm9yIHRhYmxlIHN0eWxpbmcKCiMgb3duIGZ1bmN0aW9ucwpzb3VyY2UoIi4uL2Z1bmN0aW9ucy9mdW5jdGlvbnNfYmFzaWMuUiIpCnNvdXJjZSgiLi4vZnVuY3Rpb25zL2Z1bmN0aW9uc19zdW1tYXJ5LlIiKQpzb3VyY2UoIi4uL2Z1bmN0aW9ucy8wMF9wYXJhbWV0ZXJzLlIiKQoKIyBLbml0ciBvcHRpb25zCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyBXaGVuIGRvaW5nIGl0IGhlcmUgaW4gdGhlIG5vdGVib29rCnZhcl9pbnN0IDwtICdFSVNUJwp2YXJfZGVwdCA8LSAndjInCgojIFdoZW4gY2FsbGluZyBmcm9tIGEgaGlnaGVydCBsZXZlbCBzY3JpcHQKI3Zhcl9pbnN0IDwtIHBhcmFtcyRpbnN0aXR1dGUKI3Zhcl9kZXB0IDwtIHBhcmFtcyRkZXBhcnRtZW50CmBgYAoKIyBJbnRyb2R1Y3Rpb246IE1hcHBpbmcgb2YgYnJvYWQgcmVzZWFyY2ggZmllbGQgYXJvdW5kIGByIHZhcl9pbnN0YCBpbiBgciB2YXJfZGVwdGAKCkhlcmUgYXJlIHByZWxpbWluYXJ5IHJlc3VsdHMgb2YgdGhlIGJpYmxpb21ldHJpYyBtYXBwaW5nIG9mIEVJU1QuIEl0cyBwdXJwb3NlIGlzOgoKKiBUbyBtYXAgdGhlIGJyb2FkZXIgcmVzZWFyY2ggY29tbXVuaXR5IGFuZCBkaXN0aW5jdCByZXNlYXJjaCBmaWVsZCB0aGUgZGVwYXJ0bWVudCBjb250cmlidXRlcyB0by4KKiBJZGVudGlmeSBjb3JlIGtub3dsZWRnZSBiYXNlcywgcmVzZWFyY2ggYXJlYXMgZ3RyZW5kcyBhbmQgdG9waWNzLgoqIEhpZ2hsaWdodCB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIGRlcGFydG1lbnQgd2l0aGluIHRoaXMgZHluYW1pY3MuCgpUaGUgbWV0aG9kIGZvciB0aGUgcmVzZWFyY2gtZmllbGQtbWFwcGluZyBjYW4gYmUgcmV2aWV3ZWQgaGVyZToKCltSYWthcywgTS4sICYgSGFpbiwgRC4gUy4gKDIwMTkpLiBUaGUgc3RhdGUgb2YgaW5ub3ZhdGlvbiBzeXN0ZW0gcmVzZWFyY2g6IFdoYXQgaGFwcGVucyBiZW5lYXRoIHRoZSBzdXJmYWNlPy4gUmVzZWFyY2ggUG9saWN5LCA0OCg5KSwgMTAzNzg3Ll0oaHR0cHM6Ly9kb2kub3JnLzEwLjEwMTYvai5yZXNwb2wuMjAxOS4wNC4wMTEpCgoqKk5vdGU6KiogVGhlIGFuYWx5c2lzIGluIHRoaXMgZG9jdW1lbnQgZGVwaWN0cyB0aGUgKmxhcmdlciByZXNlYXJjaCBmaWVsZCogYXJvdW5kIHRoZSBkZXBhcnRtZW50LCB0aGVyZWJ5IGFsbCBhbmFseXNpcyByZXN1bHRzIGFyZSBiYXNlZCBvbiB0aGUgcHVibGljYXRpb25zIG9mIHRoZSBkZXBhcnRtZW50IHBsdXMgcmVsYXRlZCAKCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyBMb2FkIGRhdGEKTSA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9NXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJT4lIGFzX3RpYmJsZSgpICU+JSAKICBkaXN0aW5jdChVVCwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIAogIGZpbHRlcihQWSA+PSBQWV9taW4sIFBZIDw9IFBZX21heCkgJT4lCiAgZ3JvdXBfYnkoUFkpICU+JQogICAgbXV0YXRlKFRDX2NvaG9ydF9yYW5rID0gcGVyY2VudF9yYW5rKFRDKSkgJT4lCiAgdW5ncm91cCgpIApgYGAKCmBgYHtyfQpjb21fbGFiZWxzIDwtIHJlYWRfY3N2MignLi4vZGF0YS9jb21tdW5pdHlfbGFiZWxpbmcuY3N2JykgICU+JSBmaWx0ZXIoaW5zdGl0dXRlID09IHZhcl9pbnN0LCBkZXBhcnRtZW50ID09IHZhcl9kZXB0KSAlPiUgYXJyYW5nZShpbnN0aXR1dGUsIGRlcGFydG1lbnQsIHR5cGUsIGNvbSkgJT4lIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCh0eXBlLCAnICcsIGNvbSwgJzogdW5sYWJlbGVkJyksIHBhc3RlMCh0eXBlLCAnICcsIGNvbSwgJzogJywgbGFiZWwpKSkKYGBgCjwhLS0tCiMgU2VlZCBBcnRpY2xlcwoKKipOb3RlOioqIFRoZSBzZWVkIGFydGljbGVzIGRlZW1lZCByZXByZXNlbnRhdGl2ZSBmb3IgdGhlIGFjdGl2ZSBhcmVhcyBvZiByZXNlYXJjaCBpbiB0aGUgaW5zdGl0dXRpb24sIGFuZCBpbmNsdWRlIGF1dGhvcnMgYWZmaWxpYXRlZCB3aXRoIHRoZSBpbnN0aXR1dGlvbi4gVGhlIGRlcGFydG1lbnRzIHJlc2VhcmNoIGZpZWxkIGlzIGlkZW50aWZpZWQgYnkgc2VsZWN0aW5nIHRoZSAyMDAwIG1vc3Qgc2ltaWxhciBwdWJsaWNhdGlvbnMgdG8gdGhlIHNlbGVjdGVkIHNlZWQgYXJ0aWNsZXMuIFNlZSBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucy4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpzZWVkIDwtY29udmVydDJkZihmaWxlID0gcGFzdGUwKCcuLi8uLi9kYXRhL3NlZWRzL3Njb3B1c18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICdfc2VlZF9zZWxlY3QuY3N2JyksIGRic291cmNlID0gInNjb3B1cyIsIGZvcm1hdCA9ICJjc3YiKSAlPiUKICBhc190aWJibGUoKSAlPiUKICBtdXRhdGUoc2VlZCA9IFRSVUUpIApgYGAKCmBgYHtyfQpzZWVkICU+JQogIHNlbGVjdChBVSwgUFksIFRJLCBKSSkgJT4lCiAgbXV0YXRlKEFVID0gQVUgJT4lIHN0cl90cnVuYygzMCksCiAgICAgICAgIFRJID0gVEkgJT4lIHN0cl90cnVuYygxMDApLAogICAgICAgICBKSSA9IEpJICU+JSBzdHJfdHJ1bmMoMzApKSAlPiUKICBrYWJsZSgpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZvbnRfc2l6ZSA9IDEwKQpgYGAKCi0tLT4KCiMgR2VuZXJhbCBPdmVydmlldyBvdmVyIHRoZSByZXNlYXJjaCBmaWVsZAoKKipOb3RlOioqIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBiYXNpYyBkZXNjcmlwdGl2ZXMgb2YgdGggaWRlbnRpZmllZCByZXNlYXJjaCBmaWVsbGQsIGluY2x1ZGluZyBudW1iZXIgb2YgYXJ0aWNsZXMgb3ZlciB0aW1lLCBjb3VudHJpZXMsIGluc3RpdHV0aW9ucywgYW5kIGF1dGhvcnMuIFNlZSBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucy4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIHJlc3VsdHMgPC0gYmlibGlvQW5hbHlzaXMoTSwgc2VwID0gIjsiKQpyZXN1bHRzIDwtIHJlYWRfcmRzKHBhc3RlMCgnLi4vLi4vdGVtcC9NX3Jlc18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKIyMgTWFpbiBJbmRpY2F0b3JzOiBQdWJsaWNhdGlvbnMsIEF1dGhvcnMsIENvdW50cmllcyAKCmBgYHtyfQojcmVzdWx0cyAlPiUgcGxvdChrID0gMTAsIHBhdXNlID0gRkFMU0UpCmBgYAoKYGBge3J9CnByb2RfQVUgPC0gTSAlPiUgYXV0aG9yUHJvZE92ZXJUaW1lKGsgPSAxMCwgZ3JhcGggPSBUUlVFKQojcGxvdChwcm9kX0FVJGdyYXBoKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpybShyZXN1bHRzLCBwcm9kX0FVKQpgYGAKCiMjIENvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcmVzZWFyY2ggZmllbGQncyBUb3AgQXV0aG9ycy1LZXl3b3Jkcy1Kb3VybmFscwoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fdGhyZWVmaWVsZCA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC90aHJlZWZpZWxkXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgCmBgYAoKYGBge3IsIGZpZy53aWR0aD0xNy41LCBmaWcuaGVpZ2h0PTE3LjV9Ck1fdGhyZWVmaWVsZApgYGAKCiMgVG9waWMgbW9kZWxsaW5nIAoKKipOb3RlOioqIEhlcmUsIHdlIHJlcG9ydCB0aGUgcmVzdWx0cyBvZiBhIExEQSB0b3BpYy1tb2RlbGxpbmcgKGJhc2ljYWxseSwgY2x1c3RlcmluZyBvbiB3b3Jkcykgb24gYWxsIHRpdGxlK2Fic3RyYWN0IHRleHRzLiBJZGVudGlmaWVkIHRvcGljcyBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYnJvYWQgdGhlbWVzIGluIHRoZSByZXNlYXJjaCBmaWVsZC4gU2VlIGBUZWNobmljYWwgZGVzY3JpcHRpb25gZm9yIGFkZGl0aW9uYWwgZXhwbGFuYXRpb25zLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnRleHRfdGlkeSA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC90ZXh0X3RpZHlfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQp0ZXh0X2xkYSA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC90ZXh0X0xEQV8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpIAoKdGV4dF9sZGFfYmV0YSA8LSB0ZXh0X2xkYSAlPiUgdGlkeShtYXRyaXggPSAiYmV0YSIpIAp0ZXh0X2xkYV9nYW1tYSA8LSB0ZXh0X2xkYSAlPiUgdGlkeShtYXRyaXggPSAiZ2FtbWEiKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpjb21fbmFtZXNfdG9wIDwtIHRpYmJsZSggCiAgY29tID0gMToodGV4dF9sZGFfZ2FtbWEgJT4lIHB1bGwodG9waWMpICU+JSBuX2Rpc3RpbmN0KCkpLAogIHR5cGUgPSAnVFAnLAogIGNvbCA9IGNvbSAlPiUgZ2dfY29sb3Jfc2VsZWN0KHBhbCA9IHBhbF90cCkpICU+JQogIGxlZnRfam9pbihjb21fbGFiZWxzICU+JSBmaWx0ZXIodHlwZSA9PSAnVFAnKSAlPiUgc2VsZWN0KGNvbSwgbGFiZWwpLCBieSA9ICdjb20nKSAlPiUKICBtdXRhdGUobGFiZWwgPSBpZmVsc2UoaXMubmEobGFiZWwpLCBwYXN0ZTAoJ1RQICcsIGNvbSwgJzogdW5sYWJlbGVkJyksIGxhYmVsKSkKICAgICAgICAgICAgCiMgIyAxc3QgYWx0ZXJuYXRpdmU6IE51bWJlciB0aGVtIDEtbgojIHBhc3RlKHR5cGUsIDE6KHRleHRfbGRhX2dhbW1hICU+JSBwdWxsKHRvcGljKSAlPiUgbl9kaXN0aW5jdCgpKSkgICAgICAgICAgIApgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQp0ZXh0X2xkYV9iZXRhICU8PiUgIGlubmVyX2pvaW4oY29tX25hbWVzX3RvcCAlPiUgc2VsZWN0KGNvbSwgbGFiZWwsIGNvbCksIGJ5ID0gYygndG9waWMnID0gJ2NvbScpKQp0ZXh0X2xkYV9nYW1tYSAlPD4lIGlubmVyX2pvaW4oY29tX25hbWVzX3RvcCAlPiUgc2VsZWN0KGNvbSwgbGFiZWwsIGNvbCksIGJ5ID0gYygndG9waWMnID0gJ2NvbScpKQpgYGAKCgojIyBUb3BpY3MgYnkgdG9wd29yZHMKCmBgYHtyLCBmaWcud2lkdGg9MTUsIGZpZy5oZWlnaHQ9MTV9IAp0ZXh0X2xkYV9iZXRhICU+JQogIGdyb3VwX2J5KGxhYmVsKSAlPiUKICBzbGljZV9tYXgoYmV0YSwgbiA9IDEwKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKHRlcm0gPSByZW9yZGVyX3dpdGhpbih0ZXJtLCBiZXRhLCBsYWJlbCkpICU+JQogIGdncGxvdChhZXModGVybSwgYmV0YSwgZmlsbCA9IGZhY3RvcihsYWJlbCkpKSArCiAgZ2VvbV9jb2woc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogIGZhY2V0X3dyYXAofiBsYWJlbCwgc2NhbGVzID0gImZyZWUiLCBuY29sID0gMykgKwogIGNvb3JkX2ZsaXAoKSArCiAgc2NhbGVfeF9yZW9yZGVyZWQoKSArCiAgbGFicyh4ID0gIkludHJhLXRvcGljIGRpc3RyaWJ1dGlvbiBvZiB3b3JkIiwKICAgICAgIHkgPSAiV29yZHMgaW4gdG9waWMiKSArIAogIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWUgPSAiTGVnZW5kIiwgdmFsdWVzID0gY29tX25hbWVzX3RvcCAlPiUgcHVsbChjb2wpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCgojcGxvdF9seSA8LSBwbG90ICU+JSBwbG90bHk6OmdncGxvdGx5KCkKI2h0bWx3aWRnZXRzOjpzYXZlV2lkZ2V0KHBsb3RseTo6YXNfd2lkZ2V0KHBsb3RfbHkpLCAnLi4vb3V0cHV0XHZpc19wbG90bHlfdG9waWNfdGVybXMuaHRtbCcsIHNlbGZjb250YWluZWQgPSBUUlVFKQpgYGAKCioqTm90ZToqKiBXaGlsZSB0aGlzIHN0YXRpYyB2aWVzIGlzIGhlbHBmdWwsIEkgcmVjb21tZW5kIHVzaW5nIHRoZSBpbnRlcmFjdGl2ZSBMREFWaXMgdmVyc2lvbiB0byBiZSBmb3VuZCB1bmRlciBgciBwYXN0ZTAoJ2h0dHBzOi8vZGFuaWVsLWhhaW4uZ2l0aHViLmlvL2JpYmxpb19sdXhfMjAyMi9vdXRwdXQvdG9waWNfbW9kZWxsaW5nL0xEQXZpel8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcvaW5kZXguaHRtbCN0b3BpYz0xJmxhbWJkYT0wLjYwJnRlcm09JylgLiBGb3IgZnVuY3Rpb25hbGl0eSBhbmQgdXNhZ2UsIHNlZSDCtFRlY2huaWNhbCDCtC4KCmBgYHtyLCBmaWcud2lkdGggPSAxNSwgZmlnLmhlaWdodD03LjV9CnRleHRfbGRhX2dhbW1hICU+JQogIHJlbmFtZSh3ZWlnaHQgPSBnYW1tYSkgJT4lCiAgbGVmdF9qb2luKE0gJT4lIHNlbGVjdChYWCwgUFkpLCBieSA9IGMoJ2RvY3VtZW50JyA9ICdYWCcpKSAlPiUKICBtdXRhdGUoUFkgPSBhcy5udW1lcmljKFBZKSkgJT4lCiAgZ3JvdXBfYnkoUFksIGxhYmVsKSAlPiUgc3VtbWFyaXNlKHdlaWdodCA9IHN1bSh3ZWlnaHQpKSAlPiUgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KFBZKSAlPiUgbXV0YXRlKHdlaWdodF9QWSA9IHN1bSh3ZWlnaHQpKSAlPiUgdW5ncm91cCgpICU+JQogIG11dGF0ZSh3ZWlnaHRfcmVsID0gd2VpZ2h0IC8gd2VpZ2h0X1BZKSAlPiUKICBzZWxlY3QoUFksIGxhYmVsLCB3ZWlnaHQsIHdlaWdodF9yZWwpICU+JQogIGZpbHRlcihQWSA+PSBQWV9taW4gJiBQWSA8PSBQWV9tYXgpICU+JQogIGFycmFuZ2UoUFksIGxhYmVsKSAlPiUKICBwbG90X3N1bW1hcnlfdGltZWxpbmUoeTEgPSB3ZWlnaHQsIHkyID0gd2VpZ2h0X3JlbCwgdCA9IFBZLCB0X21pbiA9IFBZX21pbiwgdF9tYXggPSBQWV9tYXgsIGJ5ID0gbGFiZWwsICBsYWJlbCA9IFRSVUUsIHBhbCA9IHBhbF90cCwgCiAgICAgICAgICAgICAgICAgICAgICAgIHkxX3RleHQgPSAiVG9waWMgcG9wdWxhcml0eSBhbm51YWx5IiwgeTJfdGV4dCA9ICJTaGFyZSBvZiB0b3BpYyBhbm51YWxseSIpICsKICBwbG90X2Fubm90YXRpb24odGl0bGUgPSBwYXN0ZSgnVG9waWMgTW9kZWxsaW5nOicsIHZhcl9pbnN0LCAnRmllbGQgYXJvdW5kIERlcHQuJywgdmFyX2RlcHQsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUoJ1RpbWVmcmFtZTonLCBQWV9taW4sICctJywgUFlfbWF4ICwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICdBYnNvbHV0ZSB0b3BpYyBhcHBlYXJhbmNlIChsZWZ0KSwgUmVsYXRpdmUgdG9waWMgYXBwZWFyYW5jZSAocmlnaHQpJykKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMTUsIGZpZy5oZWlnaHQ9Ny41fQp0ZXh0X2xkYV9nYW1tYSAlPiUKICByZW5hbWUod2VpZ2h0ID0gZ2FtbWEpICU+JQogIGlubmVyX2pvaW4oTSAlPiUgc2VsZWN0KFhYLCBQWSwgVENfY29ob3J0X3JhbmspICU+JQogICAgICAgICAgICAgIGZpbHRlcihpbnRfZGVwdCA9IFRSVUUpLCBieSA9IGMoJ2RvY3VtZW50JyA9ICdYWCcpKSAlPiUKICAjIG11dGF0ZShpbXBhY3QgPSB3ZWlnaHQqIFRDX2NvaG9ydF9yYW5rKSAlPiUKICBtdXRhdGUoaW1wYWN0ID0gVENfY29ob3J0X3JhbmsgPj0gMC45KSAlPiUKICBncm91cF9ieShQWSkgJT4lCiAgZmlsdGVyKHBlcmNlbnRfcmFuayh3ZWlnaHQpID49IDAuNSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KGxhYmVsLCBQWSkgJT4lCiAgc3VtbWFyaXNlKGltcGFjdCA9IG1lYW4oaW1wYWN0KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gUFksIHkgPSBpbXBhY3QsIGNvbCA9IGxhYmVsKSkgKwogIGdlb21fbGluZSgpICsgCiAgZ2VvbV9wb2ludCgpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsKICBsYWJzKHRpdGxlID0gcGFzdGUoJ1RvcGljIEltcGFjdDonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIHggPSAnWWVhcicsCiAgICAgICAgICAgICAgICAgIHkgPSAnVG9waWMgSW1wYWN0JywKICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICdUb3BpYyBJbXBhY3QgcmVmZXJzIHRvIHRoZSBzaGFyZSBvZiBwdWJsaWNhdGlvbnMgd2l0aGluIHRoZSBjb2hvcnQgdG9wLTEwJSBjaXRlZCBwdWJsaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0b3BpYycsCiAgICAgICAgICAgICAgICAgICkKYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnJtKHRleHRfdGlkeSwgdGV4dF9sZGEpCmBgYAoKIyBLbm93bGVkZ2UgQmFzZXM6IENvLUNpdGF0aW9uIG5ldHdvcmsgYW5hbHlzaXMgCgoqKk5vdGU6KiogVGhpcyBhbmFseXNpcyByZWZlcnMgdGhlIGNvLWNpdGF0aW9uIGFuYWx5c2lzLCB3aGVyZSB0aGUgY2l0ZWQgcmVmZXJlbmNlcyBhbmQgbm90IHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbnMgYXJlIHRoZSB1bml0IG9mIGFuYWx5c2lzLiBJZGVudGlmaWVkIGtub3dsZWRnZSBiYXNlcyBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGtub3dsZWRnZSBmb3VuZGF0aW9uIHRoZSBmaWVsZCBkcmF3cyBmcm9tLiBTZWUgYFRlY2huaWNhbCBkZXNjcmlwdGlvbmBmb3IgYWRkaXRpb25hbCBleHBsYW5hdGlvbnMuCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KQ19udyA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9DX253XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgICU+JQogIGRyb3BfbmEoY29tKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpjb21fbmFtZXNfY2l0IDwtIHRpYmJsZSggCiAgY29tID0gMTooQ19udyAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpLAogIHR5cGUgPSAnS0InLAogIGNvbCA9IGNvbSAlPiUgZ2dfY29sb3Jfc2VsZWN0KHBhbCA9IHBhbF9rYikpICU+JQogIGxlZnRfam9pbihjb21fbGFiZWxzICU+JSBmaWx0ZXIodHlwZSA9PSAnS0InKSAlPiUgc2VsZWN0KGNvbSwgbGFiZWwpLCBieSA9ICdjb20nKSAlPiUKICBtdXRhdGUobGFiZWwgPSBpZmVsc2UoaXMubmEobGFiZWwpLCBwYXN0ZTAoJ0tCICcsIGNvbSwgJzogdW5sYWJlbGVkJyksIGxhYmVsKSkKCiMgIyAxc3QgYWx0ZXJuYXRpdmU6IE51bWJlciB0aGVtIDEtbgojIHBhc3RlKHR5cGUsIDE6KENfbncgJT4lIHB1bGwoY29tKSAlPiUgbl9kaXN0aW5jdCgpKSkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KQ19udyAlPD4lIGxlZnRfam9pbihjb21fbmFtZXNfY2l0ICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSAiY29tIikKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0Ka2Jfc3RhdHMgPC0gQ19udyAlPiUKICBncm91cF9ieShsYWJlbCkgJT4lCiAgc3VtbWFyaXNlKG4gPSBuKCksIGRlbnNpdHlfaW50ID0gKChzdW0oZGdyX2ludCkgLyAobigpICogKG4oKSAtIDEpKSkgKiAxMDApICU+JSByb3VuZCgzKSkgJT4lCiAgcmVsb2NhdGUobGFiZWwsIGV2ZXJ5dGhpbmcoKSkKYGBgCgpgYGB7cn0Ka2Jfc3VtIDwtQ19udyAlPiUgZ3JvdXBfYnkoY29tKSAlPiUgCiAgYXJyYW5nZShjb20sIGRlc2MoZGdyX2ludCkpICU+JQogIG11dGF0ZShuYW1lID0gbmFtZSAlPiUgc3RyX3RydW5jKDE1MCkpICU+JQogIHNsaWNlX21heChvcmRlcl9ieSA9IGRncl9pbnQsIG4gPSAxMCwgd2l0aF90aWVzID0gRkFMU0UpICU+JSAKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KCBuYW1lLCBkZ3JfaW50LCBkZ3IpICU+JQogIGthYmxlKCkgCgpmb3IoaSBpbiAxOm5yb3coY29tX25hbWVzX2NpdCkpewogIGtiX3N1bSA8LSBrYl9zdW0gJT4lCiAgICBwYWNrX3Jvd3MocGFzdGUwKCdLbm93bGVkZ2UgQmFzZSAnLCBpLCAnOiAnLCBjb21fbmFtZXNfY2l0W2ksICdsYWJlbCddLAogICAgICAgICAgICAgICAgICAgICAnICAgKG4gPSAnLCBrYl9zdGF0c1tpLCAnbiddLCAnLCBkZW5zaXR5ID0nLCBrYl9zdGF0c1tpLCAnZGVuc2l0eV9pbnQnXSAlPiUgcm91bmQoMiksICcpJyApLCAKICAgICAgICAgICAgICAoaSoxMC05KSwgIChpKjEwKSwgbGFiZWxfcm93X2NzcyA9ICJiYWNrZ3JvdW5kLWNvbG9yOiAjNjY2OyBjb2xvcjogI2ZmZjsiKSAKICB9CgprYl9zdW0gJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwgZm9udF9zaXplID0gMTApCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmVsXzJtIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL2VsXzJtXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJT4lCiAgZHJvcF9uYSgpCmBgYAoKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpjaXRfY29tX3llYXIgPC0gZWxfMm0gJT4lCiAgY291bnQoY29tX2NpdCwgUFksIG5hbWUgPSAnVEMnKSAlPiUKICBncm91cF9ieShQWSkgJT4lCiAgbXV0YXRlKFRDX3JlbCA9IFRDIC8gc3VtKFRDKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGFycmFuZ2UoUFksIGNvbV9jaXQpICU+JQogIGxlZnRfam9pbihjb21fbmFtZXNfY2l0ICwgYnkgPSBjKCdjb21fY2l0JyA9ICdjb20nKSkgJT4lIAogIGNvbXBsZXRlKGxhYmVsLCBQWSwgZmlsbCA9IGxpc3QoVEMgPSAwLCBUQ19yZWwgPSAwKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMTUsIGZpZy5oZWlnaHQ9Ny41fQpjaXRfY29tX3llYXIgJT4lCiAgcGxvdF9zdW1tYXJ5X3RpbWVsaW5lKHkxID0gVEMsIHkyID0gVENfcmVsLCB0ID0gUFksIHRfbWluID0gUFlfbWluLCB0X21heCA9IFBZX21heCwgYnkgPSBsYWJlbCwgcGFsID0gcGFsX2tiLCBsYWJlbCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgIHkxX3RleHQgPSAiTnVtYmVyIGNpdGF0aW9ucyByZWNpZXZlZCBhbm51YWxseSIsICB5Ml90ZXh0ID0gIlNoYXJlIG9mIGNpdGF0aW9ucyByZWNpZXZlZCBhbm51YWxseSIpICsKICBwbG90X2Fubm90YXRpb24odGl0bGUgPSBwYXN0ZSgnS25vd2xlZGdlIEJzZXM6JywgdmFyX2luc3QsICdGaWVsZCBhcm91bmQgRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZSgnVGltZWZyYW1lOicsIFBZX21pbiwgJy0nLCBQWV9tYXggLCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ0Fic29sdXRlIGtub3dsZWRnZSBiYXNlIGFwcGVhcmFuY2UgKGxlZnQpLCBSZWxhdGl2ZSBrbm93bGVkZ2UgYmFzZSBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCiMgUmVzZWFyY2ggQXJlYXM6IEJpYmxpb2dyYXBoaWMgY291cGxpbmcgYW5hbHlzaXMKCioqTm90ZToqKiBUaGlzIGFuYWx5c2lzIHJlZmVycyB0aGUgYmlibGlvZ3JhcGhpYyBjb3VwbGluZyBhbmFseXNpcywgd2hlcmUgb3JpZ2luYWwgcHVibGljYXRpb25zIGFyZSB0aGUgdW5pdCBvZiBhbmFseXNpcy4gSWRlbnRpZmllZCByZXNlYXJjaCBhcmVhcyBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGZpZWxkJ3MgY3VycmVudCByZXNlYXJjaCBmcm9udGllci4gU2VlIGBUZWNobmljYWwgZGVzY3JpcHRpb25gZm9yIGFkZGl0aW9uYWwgZXhwbGFuYXRpb25zLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fYmliIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL01fYmliXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJT4lIAogIGFzX3RpYmJsZSgpICU+JQogIGRyb3BfbmEoY29tKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpjb21fbmFtZXNfYmliIDwtIHRpYmJsZSggCiAgY29tID0gMTooTV9iaWIgJT4lIHB1bGwoY29tKSAlPiUgbl9kaXN0aW5jdCgpKSwKICB0eXBlID0gJ1JBJywKICBjb2wgPSBjb20gJT4lIGdnX2NvbG9yX3NlbGVjdChwYWwgPSBwYWxfcmEpKSAlPiUKICBsZWZ0X2pvaW4oY29tX2xhYmVscyAlPiUgZmlsdGVyKHR5cGUgPT0gJ1JBJykgJT4lIHNlbGVjdChjb20sIGxhYmVsKSwgYnkgPSAnY29tJykgJT4lCiAgbXV0YXRlKGxhYmVsID0gaWZlbHNlKGlzLm5hKGxhYmVsKSwgcGFzdGUwKCdSQSAnLCBjb20sICc6IHVubGFiZWxlZCcpLCBsYWJlbCkpCgojICMgMXN0IGFsdGVybmF0aXZlOiBOdW1iZXIgdGhlbSAxLW4KIyBwYXN0ZSh0eXBlLCAxOihNX2JpYiAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpNX2JpYiAlPD4lIGxlZnRfam9pbihjb21fbmFtZXNfYmliICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSAiY29tIikKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KcmFfc3RhdHMgPC0gTV9iaWIgJT4lCiAgZHJvcF9uYShjb20pICU+JQogIGdyb3VwX2J5KGNvbSwgbGFiZWwpICU+JQogIHN1bW1hcmlzZShuID0gbigpLCBkZW5zaXR5X2ludCA9ICgoc3VtKGRncl9pbnQpIC8gKG4oKSAqIChuKCkgLSAxKSkpICogMTAwKSAlPiUgcm91bmQoMykpICU+JQogIHNlbGVjdChjb20sIGxhYmVsLCBldmVyeXRoaW5nKCkpCmBgYAoKYGBge3J9CnJhX3N1bSA8LSBNX2JpYiAlPiUgZ3JvdXBfYnkobGFiZWwpICU+JSAKICBsZWZ0X2pvaW4oTSAlPiUgc2VsZWN0KFhYLCBBVSwgUFksIFRJLCBUQyksIGJ5ID0gJ1hYJykgJT4lCiAgbXV0YXRlKGRncl9zZWxlY3QgPSAoZGdyX2ludCAvIG1heChkZ3JfaW50KSAqIChUQyAvIG1heChUQykpKSApICU+JQogIHNsaWNlX21heChvcmRlcl9ieSA9IGRncl9zZWxlY3QsIG4gPSAxMCwgd2l0aF90aWVzID0gRkFMU0UpICU+JSAKICBtdXRhdGUoVENfeWVhciA9IChUQyAvICgyMDIxICsgMSAtIFBZKSkgJT4lIHJvdW5kKDIpLAogICAgICAgICBkZ3JfaW50ID0gZGdyX2ludCAlPiUgcm91bmQoMiksCiAgICAgICAgIEFVID0gQVUgJT4lIHN0cl90cnVuYygyNSksCiAgICAgICAgIFRJID0gVEkgJT4lIHN0cl90cnVuYygxMjUpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KEFVLCBQWSwgVEksIGRncl9pbnQsIFRDLCBUQ195ZWFyKSAlPiUKICBrYWJsZSgpCgoKZm9yKGkgaW4gMTpucm93KGNvbV9uYW1lc19iaWIpKXsKICByYV9zdW0gICU8PiUKICAgIHBhY2tfcm93cyhwYXN0ZTAoJ1Jlc2VhcmNoIEFyZWEgJywgaSwgJzogJywgY29tX25hbWVzX2JpYltpLCAnbGFiZWwnXSwKICAgICAgICAgICAgICAgICAgICAgJyAgIChuID0gJywgcmFfc3RhdHNbaSwgJ24nXSwgJywgZGVuc2l0eSA9JywgcmFfc3RhdHNbaSwgJ2RlbnNpdHlfaW50J10gJT4lIHJvdW5kKDIpLCAnKScgKSwgCiAgICAgICAgICAgICAgKGkqMTAtOSksICAoaSoxMCksIGxhYmVsX3Jvd19jc3MgPSAiYmFja2dyb3VuZC1jb2xvcjogIzY2NjsgY29sb3I6ICNmZmY7IikgCiAgfQoKcmFfc3VtICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCBmb250X3NpemUgPSAxMCkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMTUsIGZpZy5oZWlnaHQ9Ny41fQpNX2JpYiAlPiUKICBsZWZ0X2pvaW4oTSAlPiUgc2VsZWN0KFhYLCBQWSksIGJ5ID0gJ1hYJykgJT4lCiAgbXV0YXRlKFBZID0gUFkgJT4lIGFzLm51bWVyaWMoKSkgJT4lCiAgZ3JvdXBfYnkobGFiZWwsIFBZKSAlPiUgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkoUFkpICU+JSBtdXRhdGUobl9QWSA9IHN1bShuKSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUobl9yZWwgPSBuIC8gbl9QWSkgJT4lCiAgc2VsZWN0KGxhYmVsLCBQWSwgbiwgbl9yZWwpICU+JQogIGFycmFuZ2UobGFiZWwsIFBZKSAlPiUgCiAgY29tcGxldGUobGFiZWwsIFBZLCBmaWxsID0gbGlzdChuID0gMCwgbl9yZWwgPSAwKSkgJT4lCiAgcGxvdF9zdW1tYXJ5X3RpbWVsaW5lKHkxID0gbiwgeTIgPSBuX3JlbCwgdCA9IFBZLCB0X21pbiA9IFBZX21pbiwgdF9tYXggPSBQWV9tYXgsIGJ5ID0gbGFiZWwsIGxhYmVsID0gVFJVRSwgcGFsID0gcGFsX3JhLAogICAgICAgICAgICAgICAgICAgICAgICB5MV90ZXh0ID0gIk51bWJlciBwdWJsaWNhdGlvbnMgYW5udWFsbHkiLCB5Ml90ZXh0ID0gIlNoYXJlIG9mIHB1YmxpY2F0aW9ucyBhbm51YWxseSIpICsKICBwbG90X2Fubm90YXRpb24odGl0bGUgPSBwYXN0ZSgnUmVzZWFyY2ggQXJlYXM6JywgdmFyX2luc3QsICdGaWVsZCBhcm91bmQgRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZSgnVGltZWZyYW1lOicsIFBZX21pbiwgJy0nLCBQWV9tYXggLCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ0Fic29sdXRlIHJlc2VhcmNoIGFyZWEgYXBwZWFyYW5jZSAobGVmdCksIFJlbGF0aXZlIHJlc2VhcmNoIGFyZWEgYXBwZWFyYW5jZSAocmlnaHQpJykKYGBgCgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmdfYWdnIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL2dfYmliX2FnZ18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpICVOPiUKICBhcnJhbmdlKGNvbSkgIyAlPiUKIyAgIG11dGF0ZShuYW1lID0gbmFtZXNfcmEgJT4lIHB1bGwoY29tX3JhX25hbWUpLAojICAgICAgICAgIGNvbG9yID0gY29sc19yYSkKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD0gNy41LCBmaWcud2lkdGg9Ny41fQpnX2FnZyAlRT4lIAogIGZpbHRlcih3ZWlnaHQgPiAwICYgZnJvbSAhPSB0bykgJT4lCiAgZmlsdGVyKHdlaWdodCA+PSBxdWFudGlsZSh3ZWlnaHQsIDAuMjUpICkgICVOPiUKICBtdXRhdGUoY29tID0gY29tX25hbWVzX2JpYiAlPiUgcHVsbChsYWJlbCkpICU+JQogIGdncmFwaChsYXlvdXQgPSAiY2lyY2xlIikgKyAKICBnZW9tX2VkZ2VfZmFuKHN0cmVuZ2h0ID0gMC44LCBhZXMod2lkdGggPSB3ZWlnaHQpLCBhbHBoYSA9IDAuMikgICsgCiAgZ2VvbV9ub2RlX3BvaW50KGFlcyhzaXplID0gTiwgY29sb3IgPSBjb20pKSAgKyAKICBnZW9tX25vZGVfdGV4dChhZXMobGFiZWwgPSBjb20pLCByZXBlbCA9IFRSVUUpICsKICAjdGhlbWVfZ3JhcGgoYmFzZV9mYW1pbHkgPSAiQXJpYWwiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsKICBzY2FsZV9zaXplKHJhbmdlID0gYygyLDIwKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gcGFsX3JhKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlKCdSZXNlYXJjaCBBcmVhIENvbm5lY3Rpdml0eTonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnTm9kZXMgPSBJZGVudGlmaWVkIFJlc2VhcmNoIEFyZWFzOyBFZGdlczogQmlibGlvZ3JhcGhpYyBjb3VwbGluZyBzdHJlbmdodCAoSmFjY2FyZCB3ZWlnaHRlZCknKQpgYGAKCgojIEtub3dsZWRnZSBCYXNlcywgUmVzZWFyY2ggQXJlYXMgJiBUb3BpY3MgSW50ZXJhY3Rpb24KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIE5vZGVzCm5sXzNtIDwtIGNvbV9uYW1lc19iaWIgJT4lCiAgYmluZF9yb3dzKGNvbV9uYW1lc19jaXQpICU+JQogIGJpbmRfcm93cyhjb21fbmFtZXNfdG9wKSAlPiUKICByZW5hbWUobmFtZSA9IGxhYmVsLAogICAgICAgICBjb21fbnIgPSBjb20pICU+JQogIHJlbG9jYXRlKG5hbWUpCgojIEVkZ2VzCmVsXzJtX2tiIDwtIGVsXzJtICU+JQogIHNlbGVjdCgtZnJvbSwgLXRvKSAlPiUKICBpbm5lcl9qb2luKGNvbV9uYW1lc19jaXQgJT4lIHNlbGVjdChjb20sIGxhYmVsKSwgYnkgPSBjKCdjb21fY2l0JyA9ICdjb20nKSkgJT4lCiAgaW5uZXJfam9pbihjb21fbmFtZXNfYmliICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSBjKCdjb21fYmliJyA9ICdjb20nKSkgJT4lCiAgbXV0YXRlKHdlaWdodCA9IDEpICU+JQogIHJlbmFtZShmcm9tID0gbGFiZWwueCwKICAgICAgICAgdG8gPSBsYWJlbC55KSAlPiUgIyBnZW5lcmljCiAgc2VsZWN0KGZyb20sIHRvLCB3ZWlnaHQsIGNvbCkgJT4lIAogIGRyb3BfbmEoKSAlPiUgCiAgY291bnQoZnJvbSwgdG8sIGNvbCwgd3QgPSB3ZWlnaHQsIG5hbWUgPSAnd2VpZ2h0JykgJT4lCiAgZmlsdGVyKHBlcmNlbnRfcmFuayh3ZWlnaHQpID49IDAuMjUpICU+JQogIHdlaWdodF9qYWNjYXJkKGkgPSBmcm9tLCBqID0gdG8sIHcgPSB3ZWlnaHQpICU+JSAKICBzZWxlY3QoLXdlaWdodCkKCmVsXzJtX3RvcGljIDwtIHRleHRfbGRhX2dhbW1hICU+JSBzZWxlY3QoLXRvcGljLCAtY29sKSAlPiUKICBsZWZ0X2pvaW4oTV9iaWIgJT4lIHNlbGVjdChYWCwgY29tKSAlPiUgZHJvcF9uYShjb20pLCBieSA9IGMoJ2RvY3VtZW50JyA9ICdYWCcpKSAlPiUKICBpbm5lcl9qb2luKGNvbV9uYW1lc19iaWIgJT4lIHNlbGVjdChjb20sIGxhYmVsLCBjb2wpLCBieSA9IGMoJ2NvbScgPSAnY29tJykpICU+JQogIHJlbmFtZShmcm9tID0gbGFiZWwueSwKICAgICAgICAgdG8gPSBsYWJlbC54LAogICAgICAgICB3ZWlnaHQgPSBnYW1tYSkgJT4lICMgZ2VuZXJpYwogIHNlbGVjdChmcm9tLCB0bywgd2VpZ2h0LCBjb2wpICU+JSAKICBkcm9wX25hKCkgJT4lIAogIGNvdW50KGZyb20sIHRvLCBjb2wsIHd0ID0gd2VpZ2h0LCBuYW1lID0gJ3dlaWdodCcpICU+JQogIGZpbHRlcihwZXJjZW50X3Jhbmsod2VpZ2h0KSA+PSAwLjI1KSAlPiUKICB3ZWlnaHRfamFjY2FyZChpID0gZnJvbSwgaiA9IHRvLCB3ID0gd2VpZ2h0KSAlPiUgc2VsZWN0KC13ZWlnaHQpCgojIGdyYXBoCmdfM20gPC0gZWxfMm1fa2IgJT4lIAogIGJpbmRfcm93cyhlbF8ybV90b3BpYykgJT4lCiAgYXNfdGJsX2dyYXBoKGRpcmVjdGVkID0gVFJVRSkgJU4+JQogIGxlZnRfam9pbihubF8zbSwgYnkgPSAnbmFtZScpICU+JQogIG11dGF0ZSgKICAgIGxldmVsID0gY2FzZV93aGVuKAogICAgICB0eXBlID09ICJLQiIgfiAxLAogICAgICB0eXBlID09ICJSQSIgfiAyLAogICAgICB0eXBlID09ICJUUCIgfiAzKSwKICAgIGNvb3JkX3kgPSAwLjEsCiAgICBjb29yZF94ID0gMC4wMDEgKyAxLyhtYXgobGV2ZWwpLTEpICogKGxldmVsLTEpCiAgICApICAlTj4lCiAgZmlsdGVyKCFpcy5uYShsZXZlbCkpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CiMjIEJ1aWxkIHNhbmtleSBwbG90CmZpZyA8LSBwbG90X2x5KHR5cGUgPSAic2Fua2V5IiwgCiAgICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gImgiLAogICAgICAgICAgICAgICBhcnJhbmdlbWVudCA9ICJzbmFwIiwKICBub2RlID0gbGlzdCgKICAgIGxhYmVsID0gZ18zbSAlTj4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKG5hbWUpLAogICAgeCA9IGdfM20gJU4+JSBhc190aWJibGUoKSAlPiUgcHVsbChjb29yZF94KSwKICAgIHkgPSBnXzNtICVOPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwoY29vcmRfeSksCiAgICBjb2xvciA9IGdfM20gJU4+JSBhc190aWJibGUoKSAlPiUgcHVsbChjb2wpLCAKICAgIHBhZCA9IDQKICApLCAKICBsaW5rID0gbGlzdCgKICAgIHNvdXJjZSA9IChnXzNtICVFPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwoZnJvbSkpIC0xLAogICAgdGFyZ2V0ID0gKGdfM20gJUU+JSBhc190aWJibGUoKSAlPiUgcHVsbCh0bykpIC0xLAogICAgdmFsdWUgPSAgZ18zbSAlRT4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKHdlaWdodF9qYWMpLAogICAgY29sb3IgPSBnXzNtICVFPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwoY29sKSAlPiUgY29sMnJnYigpICU+JSBhcy5tYXRyaXgoKSAlPiUgdCgpICU+JSBhc190aWJibGUoKSAlPiUgCiAgICAgIG11dGF0ZShjb2xfcmdiID0gcGFzdGUwKCdyZ2JhKCcsIHJlZCwgJywnICwgZ3JlZW4sICcsJywgYmx1ZSwgJywwLjc1KScpKSAlPiUgIHB1bGwoY29sX3JnYikKICAgICkKKSAlPiUgCiAgbGF5b3V0KHRpdGxlID0gcGFzdGUoJ0tub3dsZWRnZSBCYXNlcywgUmVzZWFyY2ggQXJlYXMgJiBUb3BpY3M6JywgdmFyX2luc3QsICdGaWVsZCBhcm91bmQgRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgbWFyZ2luID0gbGlzdChsID0gNTAsIHIgPSA1MCwgYiA9IDEwMCwgdCA9IDEwMCwgcGFkID0gMikpIApgYGAKCgojIyBKb2ludCBPdmVydmlldyBvdmVyIEtub3dsZWRnZSBCYXNlcywgUmVzZWFyY2ggQXJlYXMsIGFuZCBUb3BpY3MKClRoaXMgcGxvdCBzaG93cyB0aGUgY29ubmVjdGlvbiBvZiBwdWJsaWNhdGlvbnMgaW4gdGhlIHJlc2VhcmNoIGFyZWFzIHRvIGtub3dsZWRnZSBiYXNlcyAoYnkgY2l0YXRpb25zKSBhbmQgdG9waWNzIChieSBnYW1tYSwgZG9jdW1lbnQtdG9waWMgd2VpZ2h0KQoKYGBge3IsIGZpZy5oZWlnaHQ9IDEwLCBmaWcud2lkdGg9MTV9CmZpZwpgYGAKCgoKIyBUcmVuZHMgCgpgYGB7cn0KdW5pX3NpbSA8LSByZWFkX3JkcyhwYXN0ZTAoJy4uLy4uL3RlbXAvdW5pX3NpbV8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKIyMgTGVhZC1MYWcgQW5hbHlzaXMgCgpgYGB7ciwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9Ny41fQpkZXNjIDwtIHVuaV9zaW0gJT4lIAogIGZpbHRlcihBVV9VTiA9PSBwYXN0ZSh2YXJfaW5zdCwgdmFyX2RlcHQpKSAlPiUKICBtdXRhdGUoZGVzYyA9IHBhc3RlMCgnTjogJywgbiwgJyBcbicsCiAgICAgICAgICAgICAgICAgICAgICAgJ1NpbWlsYXJpdHkgdG8gcGFzdDonLCBzaW1fcGFzdCAlPiUgcm91bmQoMiksICcgXG4nLAogICAgICAgICAgICAgICAgICAgICAgICdTaW1pbGFyaXR5IHRvIGZ1dHVyZTogJywgc2ltX2Z1dHVyZSAlPiUgcm91bmQoMiksICcgXG4nLAogICAgICAgICAgICAgICAgICAgICAgICdMZWFkLUxhZyBTY29yZTogJywgZnV0dXJlX3RyZW5kICU+JSByb3VuZCgyKSkpICU+JSBwdWxsKGRlc2MpCiAgCiAgCnVuaV9zaW0gJT4lCiAgc2xpY2VfbWF4KG9yZGVyX2J5ID0gbiwgbiA9IDEwMCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2ltX3Bhc3QsIHkgPSBzaW1fZnV0dXJlKSkgKwogIGdlb21fbWFya19lbGxpcHNlKGFlcyhmaWx0ZXIgPSBBVV9VTiA9PSBwYXN0ZSh2YXJfaW5zdCwgdmFyX2RlcHQpLCBsYWJlbCA9IEFVX1VOLCBmaWxsID0gJ3JlZDEnKSwgZGVzY3JpcHRpb24gPSBkZXNjKSArIGd1aWRlcyhmaWxsID0gRkFMU0UpICsKICAjZ2VvbV9wb2ludChkYXRhID0gdW5pX3NpbSAlPiUgZmlsdGVyKEFVX1VOID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCkpLCAKICAjICAgICAgICAgICBhZXMoc2l6ZSA9IG4pLCBjb2wgPSAnZGFya3JlZCcpICsgCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IG4sIGNvbCA9IGZ1dHVyZV90cmVuZCksIGFscGhhID0gMC41KSArCiAgZ2VvbV90ZXh0X3JlcGVsKCAKICAgIGRhdGEgPXVuaV9zaW0gJT4lIHNsaWNlX21heChvcmRlcl9ieSA9IG4sIG4gPSA1KSAlPiUgZmlsdGVyKEFVX1VOICE9IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCkpLCAjIEZpbHRlciBkYXRhIGZpcnN0CiAgICBhZXMobGFiZWwgPSBBVV9VTiksCiAgICBib3gucGFkZGluZyA9IDEsIG1heC5vdmVybGFwcyA9IEluZikgKwogIGdlb21fYWJsaW5lKGludGVyY2VwdCA9IDAsIHNsb3BlID0gMSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sID0gJ3Nub3czJykgKwogIHNjYWxlX2NvbG91cl9ncmFkaWVudChsb3cgPSAiYmx1ZSIsIGhpZ2ggPSAicmVkIiwgbmFtZSA9ICJMZWFkLUxhZyBTY29yZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKwogIGxhYnMoeCA9ICdTaW1pbGFyaXR5IHRvIHBhc3QnLAogICAgICAgeSA9ICdTaW1pbGFyaXR5IHRvIGZ1dHVyZScsCiAgICAgICB0aXRsZSA9IHBhc3RlKCdGaWVsZCBMZWFkLUxhZyBBbmFseXNpczonLCB2YXJfaW5zdCwgdmFyX2RlcHQsIHNlcCA9ICcgJyksCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICBjYXB0aW9uID0gJ3ggYW5kIHkgYXhpcycpCiMgKyBsaW1zKHggPSBjKDAuNjI1LCAwLjcyNSksIHkgPSBjKDAuNjI1LCAwLjcyNSkpCmBgYAoKPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5FWFQgUEFSVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgoKIyBDb2xsYWJvcmF0aW9uIAoKYGBge3J9CmVsX2luc3QgPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvZWxfaW5zdF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKCmBgYHtyfQpnX2luc3QgPC0gZWxfaW5zdCAlPiUgYXNfdGJsX2dyYXBoKGRpcmVjdGVkID0gRkFMU0UpICVFPiUKICBmaWx0ZXIod2VpZ2h0ID49IGN1dG9mX2VkZ2VfY2l0ICkgJU4+JQogIGZpbHRlcighbm9kZV9pc19pc29sYXRlZCgpKQpgYGAKCiMjIENvbGxhYm9yYXRpb24gbmV0d29yayAKCmBgYHtyLCBmaWcuaGVpZ2h0PSAxMCwgZmlnLndpZHRoPTE1fQpnX2luc3QgJU4+JSAKICBtdXRhdGUoY2VudCA9IGNlbnRyYWxpdHlfZGVncmVlKHdlaWdodHMgPSB3ZWlnaHQpKSAlPiUKICBmaWx0ZXIobmFtZSA9PSBwYXN0ZSh2YXJfaW5zdCwgdmFyX2RlcHQpICB8IHJhbmsoLWNlbnQpIDw9IDEwMCApICU+JQogIGdncmFwaChsYXlvdXQgPSAiZnIiKSArIAogIGdlb21fZWRnZV9saW5rKGFlcyh3aWR0aCA9IHdlaWdodCwKICAgICAgICAgICAgICAgICAgICAgI2NvbG9yID0gLk4oKSRuYW1lW2Zyb21dID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCkgfCAuTigpJG5hbWVbZnJvbV0gPT0gcGFzdGUodmFyX2luc3QsIHZhcl9kZXB0KSwKICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gKHdlaWdodCA+PSB3ZWlnaHQgICU+JSBxdWFudGlsZSgwLjI1KSkpCiAgICAgICAgICAgICAgICAgLCBhbHBoYSA9IDAuMjUpICArIAogIGdlb21fbm9kZV9wb2ludChhZXMoc2l6ZSA9IGNlbnQpLCBjb2wgPSAnc3RlZWxibHVlMScpICArIAogIGdlb21fbm9kZV90ZXh0KGFlcyhsYWJlbCA9IG5hbWUsIAogICAgICAgICAgICAgICAgICAgICBzaXplID0gY2VudCwKICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gKGNlbnQgPj0gY2VudCAgJT4lIHF1YW50aWxlKDAuOCkpKSwgcmVwZWwgPSBUUlVFKSArCiAgI3RoZW1lX2dyYXBoKGJhc2VfZmFtaWx5ID0gIkFyaWFsIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArCiAgc2NhbGVfZWRnZV93aWR0aF9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDUpKSAgKwogIHNjYWxlX2VkZ2VfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKCJncmV5IiwgInJlZCIpLCBuYW1lID0gJzFzdCBkZWdyZWUnKSArCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMC41LDEwKSkgCmBgYAoKIyBFbmRub3RlcwoKYGBge3J9CnNlc3Npb25JbmZvKCkKYGBgCgo=